JavaScript 设计模式之设计原则

Author Avatar
Klein 8月 25, 2018

描述

《UNIX/LINUX设计哲学》

  1. 小即是美
  2. 让每个程序只做好一件事
  3. 快速建立原型
  4. 舍弃高效率而取可移植性
  5. 采用村文本来存储数据
  6. 充分利用软件的杠杆效应(软件复用)
  7. 使用 shell 脚本来提高杆杆效应和可移植性
  8. 避免强制性的用户界面
  9. 让每个程序都称为过滤器

小准则:

  1. 允许用户定制环境
  2. 尽量使操作系统内核小而轻量化
  3. 使用小写字母并尽量简短
  4. 沉默是金
  5. 各部分之和大于整体
  6. 寻求90%的解决方案

S O L I D 五大设计原则

  • S 单一职责原则
    • 一个程序只做好一件事
    • 如果功能过于复杂就拆分开,每个部分保持独立
  • O 开放封闭原则
    • 对扩展开放,对修改封闭
    • 增加需求时,扩展新代码,而非修改已有代码
    • 软件设计的终极目标
  • L 李氏置换原则
    • 子类能覆盖父类
    • 父类能出现的地方子类就能出现
    • JS 中使用较少(弱类型 & 继承使用较少)
  • I 接口独立原则
    • 保持接口的单一独立,避免出现“胖接口”
    • JS 中没有接口,使用较少
    • 类似于单一职责原则,这里更关注接口
  • D 依赖导致原则
    • 面向接口编程,依赖于抽象而不依赖于具体
    • 使用方只关注接口而不关注具体类的实现
    • JS 中使用较少(没有接口 & 弱类型)

在 JS 中S O 体现较多,L I D 体现较少,但是要了解用意。

用 Promise 来说明 S O

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function loadImg(src) {
let promise = new Promise(function (resolve, reject) {
let img = document.createElement('img')
img.onload = function () {
resolve(img)
}
img.onerror = function () {
reject('图片加载失败')
}
img.src = src
})
return promise
}

let src = 'https://www.imooc.com/static/img/index/logo_new.png'
let result = loadImg(src)
result.then(function (img) {
console.log(1, img.width)
return img
}).then(function (img) {
console.log(2, img.height)
}).catch(function (ex) {
// 统一捕获异常
console.log(ex)
})
  • S 单一职责原则:每个 then 中的逻辑只做好一件事
  • O 开放封闭原则:如果新增需求,扩展 then

设计模式

设计模式,设计模式。两者应该分开而论。设计是指导思想,模式是套路、模板。从设计到模式。

设计模式分为3种类型:

  • 创建型
    • 工厂模式(工厂方法模式,抽象工厂模式,建造者模式)
    • 单例模式
    • 原型模式
  • 组合型
    • 适配器模式
    • 装饰器模式
    • 代理模式
    • 外观模式
    • 桥接模式
    • 组合模式
    • 享元模式
  • 行为型
    • 策略模式
    • 模板方法模式
    • 观察者模式
    • 迭代器模式
    • 职责连模式
    • 命令模式
    • 备忘录模式
    • 状态模式
    • 访问者模式
    • 中介者模式
    • 解释器模式